package com.example.myapplication.principle.open_close

/**
 *对类的扩展是开放，对修改关闭。
 *在程序需要扩展的时候，对于一个类，不要去修改原来的代码，而是通过继承的方式去扩展这个类。
 *目的：降低维护风险
 * */
open class 开闭原则 {
    private val expand1 = Expand1()
    private val expand2 = Expand2()
    private val expand3 = Expand3()
    fun doSomething(string: String) {
        when (string) {
            "1" -> expand1.doSomething()
            "2" -> expand2.doSomething()
            else -> expand3.doSomething()
        }
    }

    //   遵守 开闭原则 后,修改expand，不在内部新增
    var expand: Open = Expand1()
    fun doSomething() {
        expand.doSomething()
    }
}

interface Open {
    fun doSomething()
}

/**
 * 不去修改原来的代码，而是继承并拓展
 * */
class Expand1:Open {
    override fun doSomething() {
        TODO("Not yet implemented")
    }

}
class Expand2:Open {
    override fun doSomething() {
        TODO("Not yet implemented")
    }

}
class Expand3:Open {
    override fun doSomething() {
        TODO("Not yet implemented")
    }

}